iceoryx2 命令行工具:服务发现、数据注入与录制回放
共享内存通信的系统排查起来有个天然困难:数据不经过网络,tcpdump 这类抓包工具全无用武之地。iceoryx2 提供了一套 iox2 命令行工具补上这块空白:查看节点与服务状态、订阅实时数据、手动注入消息与事件、录制回放整段通信。本文按「观测 → 注入 → 录制回放」的排查思路整理常用命令,适合正在用 iceoryx2 做开发的工程师。
安装与总览
bash
cargo install iceoryx2-cli 安装后 iox2 按子命令分发到各子工具,iox2 --list 查看全部子命令。
节点与服务发现
排查从「现在有哪些参与方、哪些服务」开始:
bash
# 列出所有节点
iox2 node list
# 查看节点详情
iox2 node details 00000000067ab750000005550000dcf7
# 列出所有服务
iox2 service list 节点 ID 是一个长十六进制数字,node details 可以看到该节点的详细信息。服务异常、节点未注册之类的问题,先在这里确认现场。
观测:订阅数据与监听事件
不动任何进程,从外部看服务里流动的数据:
bash
# 订阅服务的实时数据流
iox2 service subscribe "distance_to_obstacle"
# 监听服务的事件通知(检查通知是否送达)
iox2 service listen "distance_to_obstacle" subscribe 用于发布订阅类服务——数据没按预期发送、字段值不对,直接在这里看;listen 用于事件类服务——事件通知是否真的发出去了,一听便知。
注入:制造测试场景
排查不应只靠等现场复现,iox2 可以主动注入数据制造条件:
bash
# 发送事件通知,直接触发对端响应
iox2 service notify --event-id 5 --num 10 distance_to_obstacle 手动发布一条消息需要先拿到数据的十六进制表示(--message 参数按十六进制字节传 payload):
bash
iox2 service publish -d IOX2DUMP --type-name Distance --type-size 16 \
--type-alignment 8 --type-variant FIXEDSIZE --repetitions 10 \
--message "09 00 00 00 1b 00 00 00 ae 47 e1 7a 14 8d bc 40" \
distance_to_obstacle 参数里 --type-size、--type-alignment、--type-variant 必须与接收方类型定义一致,否则对方按自己的布局解析会得到乱数据。拿不准布局时,可以先用 subscribe 观测一条正常报文的十六进制,照着构造。
录制与回放
现场数据可遇不可求,录制下来离线复现:
bash
# 录制数据流(-t 指定时长秒数,-o 指定输出文件)
iox2 service record -t 10 -o record.dat "distance_to_obstacle"
# 回放
iox2 service replay -i record.dat 录制文件包含两部分:元数据(服务信息、消息模式等)与带时间戳的十六进制有效载荷。典型用法是现场录一段异常数据,回办公室用 replay 反复回放给修复后的程序,验证行为是否正确,不用等下一次现场异常。
适用场景速查
| 症状 | 工具 |
|---|---|
| 节点或服务状态异常 | node list / node details / service list |
| 数据未按预期发送、值可疑 | service subscribe |
| 事件通知疑似丢失 | service listen |
| 需要模拟特定输入触发问题 | service notify / service publish |
| 算法修复后需要复现当时数据 | service record + service replay |
要点
- 共享内存通信排查靠
iox2,网络抓包工具看不到数据 - 观测三件套:
service list看现场、subscribe看数据、listen看事件 - 注入数据时类型布局参数必须与接收方一致
- 录制回放让「异常复现」不再依赖现场条件